<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            一个正则 由  字面量字符串（数字 字符串 中文） 和元字符串（有特殊含义的字符）
        */
        /* 
        
        定位
 
        正则表达式。^：匹配输入字符串的开始位置。
 
                       $：匹配输入字符串的结束位置。
        */
        //    张开头
        console.log(/^张/.test('张三'));
        console.log(/^张/.test('李三'));
        //    张三开头
        console.log(/^张三/.test('李三'));

        // 必须用4结尾
        console.log(/4$/.test('李三'));
        console.log(/4$/.test('李三4'));

        // 定了开头和结尾，整个字符串都确定了
        console.log(/^hello$/.test('hello'));
        console.log(/^hello$/.test('helloo'));




        // 限定符--次数
        /* 
        限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
*：匹配前面的子表达式零次或多次。
+：匹配前面的子表达式一次或多次。
？：匹配前面的子表达式零次或一次。
{n}：匹配确定n次。
{n,}：至少匹配n次。
{n, m}：最少匹配n次且最多匹配m次。
        */

        // 开头是a  中间可以是任意个b 结尾是c
        // *：匹配前面的子表达式零次或多次。

        console.log(/^ab*c$/.test('ac'));
        console.log(/^ab*c$/.test('abc'));
        console.log(/^ab*c$/.test('abbbbbbbbbc'));


        // +：匹配前面的子表达式一次或多次。
        // 开头是a  结尾是c b至少一个
        console.log(/^ab+c$/.test('abbbbbbbbbc'));
        console.log(/^ab+c$/.test('ac'));//f
        console.log(/^ab+c$/.test('abc'));

        //         ？：匹配前面的子表达式零次或一次。
        console.log(/^ab?c$/.test('abc'));
        console.log(/^ab?c$/.test('ac'));
        console.log(/^ab?c$/.test('abbc'));//f

        // {n}：匹配确定n次。
        console.log(/^ab{4}c$/.test('abbc'));//f 
        console.log(/^ab{4}c$/.test('abbbbc'));//t

        // {n,}：至少匹配n次。
        console.log(/^ab{4,}c$/.test('abbbbc'));//t
        console.log(/^ab{4,}c$/.test('abbbc'));//f 

        // {n, m}：最少匹配n次且最多匹配m次。

        console.log(/^ab{4,6}c$/.test('abbbc'));//f 
        console.log(/^ab{4,6}c$/.test('abbbbc'));//t
        console.log(/^ab{4,6}c$/.test('abbbbbc'));//t 
        console.log(/^ab{4,6}c$/.test('abbbbbbc'));//t 
        console.log(/^ab{4,6}c$/.test('abbbbbbbc'));//f

        //         字符匹配符用于匹配某个或某些字符。

        // [xyz]：字符集合。匹配所包含的任意一个字符。
        // 开头是a或者b或者c 中一个
        console.log(/^[abc]/.test('abbb'));
        console.log(/^[abc]/.test('1bbb'));

        // [^xyz]： 表示除了x、y、z之外都可以匹配。
        // 开头不是 a ，并且不是b 并且不是c  其他都可以
        console.log(/^[^abc]/.test('abbb'));
        console.log(/^[^abc]/.test('bbbb'));
        console.log(/^[^abc]/.test('cbbb'));
        console.log(/^[^abc]/.test('1bbb'));
        console.log(/^[^abc]/.test('你bbb'));


        // [a-z]：字符范围。匹配指定范围内的任意字符。

        // 开头是小写字母
        console.log(/^[a-z]/.test('11'));
        console.log(/^[a-z]/.test('a11'));
        console.log(/^[a-z]/.test('B11'));
        console.log(/^[a-f]/.test('faa'));
        console.log(/^[a-f]/.test('zfaa'));

        // [^a-z]：表示不包含小写字母。
        // 开头非小写字母
        console.log(/^[^a-z]/.test('啊'));
        console.log(/^[^a-z]/.test('A'));
        console.log(/^[^a-z]/.test('1'));
        console.log(/^[^a-z]/.test('；'));
        console.log(/^[^a-z]/.test(' '));

        // 开头是数字 字母都行
        console.log(/^[a-zA-Z0-9]/);
        // 开头是数字
        console.log(/^[0-9]/);
        // 开头是数字 0-5之间
        console.log(/^[0-5]/);

        console.log(/^[^a-zA-Z0-9]/.test('a222'));
        console.log(/^[^a-zA-Z0-9]/.test('11222'));
        console.log(/^[^a-zA-Z0-9]/.test('^11222'));
        console.log(/^[^a-zA-Z0-9]/.test('拿到11222'));
        console.log(/^[^a-zA-Z0-9]/.test('の11222'));



        // \d 匹配0-9之间的任一数字，相当于[0-9]。
        console.log(/^\d/.test('121'));
        console.log(/^\d/.test('a121'));
        //  \D 匹配所有0-9以外的字符，相当于[^0-9]。
        console.log(/^\D/.test('a121'));

        //  \w 匹配任意的字母、数字和下划线，相当于[A-Za-z0-9_]。
        console.log(/^\w/.test('a121'));
        console.log(/^\w/.test('_121'));
        console.log(/^\w/.test('1121'));
        console.log(/^\w/.test('的121'));

        // \W 除所有字母、数字和下划线以外的字符，相当于[^A-Za-z0-9_]。
        console.log(/^\W/.test('的121'));
        console.log(/^\W/.test('1121'));

        //  \s 匹配空格（包括换行符、制表符、空格符等）。
        console.log(/^\s/.test('1121'));
        console.log(/^\s/.test('  1121'));
        console.log(/^\s/.test(`
        223`));

        //  \S 匹配非空格的字符。
        console.log(/^\S/.test('ab'));
        console.log(/^\S/.test(' ab'));

        // .匹配除”\n”之外的任何单个字符

        console.log(/^./.test("aab"));
        console.log(/^./.test("的aab"));
        console.log(/^./.test("&aab"));
        console.log(/^./.test("1aab"));
        console.log(/^./.test("\naab"));
        console.log(/^./.test(`
        ds`));




        // 懒匹配

        // 包含两个a
        // console.log(/a{2}/.test('aa'));//r
        // console.log(/a{2}/.test('aaa'));//t

    </script>

</body>

</html>